/**
 *@auther: tang
 *@Date: 2021-02-22
 *Project: p2pPlatformSys
 *Lang: TypeScript
 */
module.exports = () => {
  return async function errorHandler(ctx, next) {
    // console.log(`请求方式${ctx.request.method} 请求接口${ctx.request.url} 来源${ctx.request.header['x-forwarded-host'] || ctx.request.header['user-agent']}`);
    // 这些接口不记录
    try {
      await next();
    } catch (err) {
      // 控制台输出
      console.log('MiddleWare errorHandler', err);
      // 所有的异常都在 app 上触发一个 error 事件，框架会记录一条错误日志
      ctx.app.emit('error', err, ctx);
      // status 如果没有,则统一为500
      const status = err.status || 500;
      // 如果是500错误，且是生产环境，则统一显示“Internal Server Error”
      const error = status === 500 && ctx.app.config.env === 'prod' ? 'Internal Server Error' : err;
      // 改变上下文状态代码
      ctx.status = status;
      // 从 error 对象上读出各个属性，设置到响应中
      ctx.body = {
        error,
        code: ctx.status || 500,
        msg: '服务器错误',
      };
    }
  };
};
